// --------------------------------------------------------------------
    // 网络编程socket封装
        // 通过一个类来实现客户端与服务端TCP/UDP连接相关操作
// --------------------------------------------------------------------


#ifndef __YMBX_SOCKET__
#define __YMBX_SOCKET__

#include <sys/socket.h>
#include "ymbxlog.hpp"
#include <cstring>
#include <errno.h>
#include <netinet/in.h>
#include "common.hpp"

namespace ymbxSock{
    class ymbxSocket;

    class ymbxSocket{
    public:
        ymbxSocket();
        void Socket(const std::string& type);
        
        void Bind(const std::string& ip,uint16_t port);
        void Listen(int num=5);
        void Connect(const std::string& ip,uint16_t port);
        int Accept(std::string* ip,uint16_t* port);
        void Close();
        
        int Getsock(){
            return _sock;
        }
    protected:
        void StrConvertoSock(const std::string& ip,uint16_t port,struct ::sockaddr_in* addr);
        void SockConvertoStr(std::string* ip,uint16_t* port,struct ::sockaddr_in& addr);
    private:
        int _sock;
    };

    class ymbxUdpSocket :public ymbxSocket{
    public:
        void Sendto(const std::string&ip,uint16_t port,const std::string& mes);
        void Recvfrom(std::string* ip,uint16_t* port,std::string* mes);
    
    };

    class ymbxTcpSocket:public ymbxSocket{
    public:
        void Send(int sock,const std::string& mes);
        void Recv(int sock,std::string* mes);
    };
}














#endif